﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//namespace bit
//{
//	int rand = 10;
//	int ADD(int left, int right)
//	{
//		return left + right;
//	}
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
//int main()
//{
//	printf("%p\n", rand);
//	printf("%d\n", bit::rand);
//	return 0;
//}

//命名空间可以嵌套
//namespace bit
//{
//	int rand = 20;
//	namespace te
//	{
//		int rand = 10;
//		int ADD(int left, int right)
//		{
//			return left + right;
//		}
//	}
//	namespace st
//	{
//		int rand = 5;
//		int ADD(int left, int right)
//		{
//			return (left + right)*2;
//		}
//	}
//}
//int main()
//{
//	printf("%d\n", bit::rand);//20
//	printf("%d\n", bit::te::rand);//10
//	printf("%d\n", bit::st::rand);//5
//	printf("%d\n", bit::te::ADD(10, 10));//20
//	printf("%d\n", bit::st::ADD(10, 10));//40
//	return 0;
//}

//项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace，不会冲突
//#include"add.h"
//int main()
//{
//	printf("%d\n", bit::add(10, 5));
//	printf("%d\n", bit::div(10, 5));
//	return 0;
//}

//因为查找的逻辑是先局部域，再全局域，默认不会再命名空间域里去查找
//namespace bit
//{
//	int a = 0;
//	int b = 1;
//}
//int main()
//{
//	// 编译报错：error C2065: “a”: 未声明的标识符
//	printf("%d\n", a);
//	return 0;
//}

//正确写法：指定命名空间访问
//int main()
//{
//	printf("%d\n", bit::a);//0
//	return 0;
//}

// using将命名空间中某个成员展开
//using bit::b;
//int main()
//{
//	printf("%d\n", bit::a);
//	printf("%d\n", b);
//	return 0;
//}
// 展开命名空间中全部成员
//using namespace bit;
//int main()
//{
//	printf("%d\n", a);
//	printf("%d\n", b);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//	std::cout << a << " " << b << " " << c << std::endl;
//	cout << a << " " << b << " " << c << endl;
//
//	cin >> a;
//	cin >> b >> c;
//	cout << a << endl;
//	cout << b << " " << c << endl;
//	return 0;
//}

//缺省参数
//#include <iostream>
//#include <assert.h>
//using namespace std;
//void Func(int a = 0)
//{
//	cout << a << endl;
//}
//int main()
//{
//	Func(); // 没有传参时，使⽤参数的默认值
//	Func(10); // 传参时，使⽤指定的实参
//	return 0;
//}
//#include <iostream>
//using namespace std;
//// 全缺省
//void Func1(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//// 半缺省
//void Func2(int a, int b = 10, int c = 20)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//int main()
//{
//	Func1();//全缺省  //10  20  30
//	Func1(1);//1   20    30
//	Func1(1, 2);//1  2  30
//	Func1(1, 2, 3);//1  2  3
//	Func2(100);//100 10 20
//	Func2(100, 200);//100 200 20
//	Func2(100, 200, 300);//100 200 300
//	return 0;
//}

//#include<iostream>
//using namespace std;
//// 1、参数类型不同
//int Add(int left, int right)
//{
//	cout << "int Add(int left, int right)" << endl;
//	return left + right;
//}
//double Add(double left, double right)
//{
//	cout << "double Add(double left, double right)" << endl;
//	return left + right;
//}
//// 2、参数个数不同
//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a)
//{
//	cout << "f(int a)" << endl;
//}
//// 3、参数类型顺序不同
//void f(int a, char b)
//{
//	cout << "f(int a,char b)" << endl;
//}
//void f(char b, int a)
//{
//	cout << "f(char b, int a)" << endl;
//}
//// 返回值不同不能作为重载条件，因为调⽤时也⽆法区分
////void fxx()
////{}
////
////int fxx()
////{
//// return 0;
////}
//// 下⾯两个函数构成重载
//// f()但是调⽤时，会报错，存在歧义，编译器不知道调⽤谁
//void f1()
//{
//	cout << "f()" << endl;
//}
//void f1(int a = 10)
//{
//	cout << "f(int a)" << endl;
//}
//int main()
//{
//	Add(10, 20);
//	Add(10.1, 20.2);
//	f();
//	f(10);
//	f(10, 'a');
//	f('a', 10);
//	return 0;
//}

